/*
 * @Description: 
 * @Version: 1.0
 * @Author: wen shukai
 * @Date: 2022-06-15 17:29:59
 * @LastEditTime: 2022-06-21 13:30:10
 * @LastEditors: wen shukai
 * @FilePath: \self-taught-js\object.js
*/
// const hd = {
//     name:'张三',
//     age:10
// }
// for(const key of Object.values(hd)){
//     console.log(key.value)
// }
// let lessons = [
//     {name:'js',click:23},
//     {name:'node',click:192}
// ];
// let ul = document.createElement('ul')
// for (const val of lessons){
//     let li = document.createElement('li')
//     li.innerHTML = `课程：${val.name},点击数：${val.click}`;
//     ul.appendChild(li)
// }
// document.body.appendChild(ul)
//对象拷贝
// let obj = {
//     name:'张三',
//     user:{
//         name:'hdcms'
//     }
// }
// let a = obj
// let b = obj
// a.user.name = 'li'
// console.log(obj.user.name)
// console.log(b.user.name)
//深拷贝
// let obj = {
//     name: '张三',
//     user: {
//         name: '李四'
//     }
// }
// let a = obj;
// let b = obj;
// function copy(object) {
//     let obj = {}
//     for (const key in object) {
//         obj[key] = object[key]
//     }
//     return obj;
// }
// let newObj = copy(obj)
// newObj.name = 'wen'
// newObj.user.name = 'wenshu'
// console.log(newObj,'1111')
// console.log(obj,'222')
// let obj = {
//     name :'张三',
//     user:{
//         name:'李四'
//     },
//     data:[]
// }
// function copy(object){
//     let obj = object instanceof Array ? []:{};
//     for(const [k,v] of Object.entries(object)){
//         obj[k] = typeof v =='object'? copy(v):v
//     }
//     return obj;
// }
// let hd = copy(obj);
// hd.data.push('温')
// console.log(JSON.stringify(hd,null,1))
// console.log(JSON.stringify(obj,null,1))
//构造函数
//  function Student(name){
//     this.name  = name
//     this.show = function(){
//         console.log(this.name)
//     }
//     //不需要返回

//  }
//  const lisi = new Student('李四')
//  lisi.show()
//  const xj = new Student('张三')
//  xj.show()

//构造函数实例化返回对象
// function ArrayObject(...values){
//     const arr = new Array()
//     arr.push.apply(arr,values);
//     arr.string = function(sym = '|'){
//         return this.join(sym);
//     }
//     return arr
// }
// const array = new ArrayObject(1,2,3);
// console.log(array);
// console.log(array.string('-'))

//js 内置构造函数
// const num = new Number(99)
// console.log(num,'11')
// console.log(num.valueOf())

// const string = new String('张三')
// console.log(string.valueOf())

// const boolean = new Boolean(true);
// console.log(boolean.valueOf())

// const data = new Date();
// console.log(data.valueOf() * 1);

// const regexp = new  RegExp ('\\d+')
// console.log(regexp.test(99));

// let hd = new Object()
// hd.name = '后盾人'
// console.log(hd)

//对象函数
//  function hd(name){}
//  console.log(hd.toString())
//  console.log(hd.length);

//使用内置构造函数
// const User = new Function (`name`,`
// this.name = name;
// this.show = function(){
//     return this.name
// }
// `
// )

// const lisi = new User("李四");
// console.log(lisi.show());

// 问题分析 属性封装
// function User(name, age) {
//     this.name = name
//     this.age = age
//     this.info = function () {
//         return this.age > 50 ? '中年' : '年轻人'
//     }
//     this.about = function () {
//         return `${this.name}是${this.info()}`
//     }
// }
// let lisi = new User("李四", 22)
// console.log(lisi.about())

//抽象封装
// function User(name,age){
//     let data = {name,age};
//     let info = function (){
//         return data.age > 50 ?'中年':'年轻人'
//     };
//     this.message = function(){
//         return `${data.name}是${info()}`
//     }
// }
// const lisi = new User('张三',22)
// console.log(lisi.message())

//getter setter 相对的年龄数据使用
// "use strict"
// const user = {
//     data:{name:'张三',age:null},
//     set age(value){
//         if(typeof value != "number" || value>100 ||value<10){
//             throw new Error('年龄格式化错误')
//         }
//         this.data.age = value
//     },
//     get age(){
//         return `年龄是：${this.data.age}`
//     }
// }
// user.age = 999
// console.log(user.age)

//json 序列化 
// let hd = {
//     "title": "后盾人",
//     "url": "houdunren.com",
//     "teacher": {
//         "name": "向军大叔",
//     }
//   }
// console.log(JSON.stringify(hd));

//原型上
// let hd = {name:3}
// console.log(hd,'111')
// console.log(hd.hasOwnProperty('name'),'22')

// let xj = Object.create(null,{
//     name:{
//         value:'张三'
//     }
// })

// console.log(xj.hasOwnProperty('name'),'333')

//object.
// var obj = {
//     a: 1,
//     b: 2,
//     c: {
//         d: 10
//     }
// }
// var o={}
// for(var key in obj){
//     if(typeof obj[key]==='object'){
//         for(var prop in obj[key]){
//             o[key]={}
//             o[key][prop]=20
//         }
//     }else{
//         o[key]=obj[key]
//     }
// }
// console.log(o)
